package com.bobo.task;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 定时器 用于执行周期性任务
 * quartz
 *
 * @author LILIBO
 * @since 2021-06-24
 */
@Slf4j
@EnableScheduling // 开启定时任务
@EnableAsync // 开启多线程任务
@Component
public class TimeTask {

    /**
     * 任务开关全局控制点
     */
    @Value("${system.task.enable}")
    private boolean enable;

    /**
     * 定时打印当前时间，延迟5秒后每隔10秒执行
     */
    @Scheduled(fixedRate = 10 * 1000, initialDelay = 5000) // 延迟5秒后每隔10秒执行
    public void taskPrintNowTime() {
        if (enable) {
            log.debug("---------------- 【定时打印当前时间】任务开始 ----------------");
            log.info("taskPrintNowTime {}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
            log.debug("---------------- 【定时打印当前时间】任务结束 ----------------");
        }
    }

    /**
     * 定时检查需要提醒的列表，每天早上8点30分执行一次，提醒内容是当天过生日人员信息
     */
    @Async // 异步任务
    @Scheduled(cron = "${system.task.cron-birth-remind-1}") // 任务执行周期
    public void taskBirthRemind1() {
        if (enable) {
            log.debug("---------------- 【当天过生日人员信息】任务开始 ----------------");
            // 每天早上8点20分，如果当天有过生日的员工，发送Email到指定账号，提醒今天过生日员工列表
            log.debug("---------------- 【当天过生日人员信息】任务结束 ----------------");
        }
    }

    /**
     * 定时检查需要提醒的列表，每天下午5点00分执行一次，提醒内容是明天过生日人员信息
     */
    @Async // 异步任务
    @Scheduled(cron = "${system.task.cron-birth-remind-2}") // 任务执行周期
    public void taskBirthRemind2() {
        if (enable) {
            log.debug("---------------- 【明天过生日人员信息】任务开始 ----------------");
            // 每天下午5点00分执行，如果明天有过生日的员工，发送Email到指定账号，提醒明天过生日员工列表
            log.debug("---------------- 【明天过生日人员信息】任务结束 ----------------");
        }
    }

}
